Various types of memory are used with digital integrated circuits (“ICs”). Volatile memory is a type of memory that loses its stored information when power is removed from the memory circuit. Random access memory (“RRAM”) is an example of volatile memory. A RAM cell can be easily reprogrammed to a desired logic state, and is often implemented in complementary metal-oxide-semiconductor (CMOS) logic. Non-volatile memory is a type of memory that preserves its stored information even if power is removed. Read-only memory (“ROM”) is an example of non-volatile memory.
Programmable read-only memory (“PROM”) is a type of memory that is configured to a desired state. A programming signal is applied to a PROM memory cell to change the cell from a first condition (i.e. first logic state) to a second condition (i.e. a second logic state). Programmable non-volatile memory is desirable in programmable logic devices (“PLDs”), such as field-programmable gate arrays (“FPGAs”) and complex programmable logic devices (“CPLDs”). Some types of programmable non-volatile memory, such as flash memory, can be repeatedly programmed. Another type of programmable non-volatile memory is one-time programmable memory.
One-time programmable non-volatile memory makes use of elements commonly referred to as “anti-fuses.” While a fuse is generally an electric component that transitions from a short-circuit state to an open-circuit state, an anti-fuse transitions from an open-circuit condition to a short-circuit condition. Various types of anti-fuses are used. An example of a three-terminal non-volatile element (i.e. a three-terminal anti-fuse) that merges source and drain regions using a gate terminal as the programming terminal is described in U.S. Pat. No. 6,266,269, issued to James Karp, Daniel Gitlin, and Shahin Toutounchi on Jul. 24, 2001, the disclosure of which is hereby incorporated by reference in its entirety for all purposes.
Non-volatile memory elements are used in many types of programmable memory applications. In some application, thousands or even hundreds of thousands of non-volatile memory elements are programmed in a single IC. If a memory cell is not programmed correctly, a fault in the programmed memory can occur. Minor variations in the fabrication of any of the several layers and patterns in a memory cell can cause a hard programming fault, where the cell state does not change after programming, or a soft programming fault, where the cell state is altered (e.g. from a non-conductive state to a conductive state), but has an undesirably high resistance, for example. A typical technique to insure proper operation of the programmed memory is to provide redundant memory cells to substitute for memory cells with hard or soft programming faults.
For example, if the user is 99% certain that no more than 10% of the memory cells will not program correctly, an additional 10% of memory cells (i.e. 110% of the total memory cells needed for operation of the IC design) can be included on the IC. The numbers used in this example are chosen merely for purposes of illustration. Logic and switching networks on the IC can be used to route around the bad memory cell and use the redundant memory cell. However, redundancy takes up area on the IC, which is undesirable.
Therefore, techniques for reducing programming faults of one-time-programmable non-volatile memory cells are desired.